package cn.xk.sys.controller;

import cn.xk.basic.util.AjaxResult;
import cn.xk.basic.util.PageList;
import cn.xk.sys.domain.Systemdictionarytype;
import cn.xk.sys.query.SystemdictionarytypeQuery;
import cn.xk.sys.service.ISystemdictionarytypeService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 接口类：部门，现在Controller层统称接口
 */
@Api(value = "部门的API", description = "部门相关的CRUD功能")
@RestController //Rest-休息，进入它会发现@Controller和@ResponseBody，现在是前后端项目分离，用异步请求，异步请求用@ResponseBody
//@ResponseBody注解的作用是将controller的方法返回的对象 通过适当的转换器 转换为指定的格式之后，写入到response对象的body区（响应体中），通常用来返回JSON数据或者是XML。
//@Controller表示当前类在Controller层
//@RequestMapping 是一个用来处理请求地址映射的注解，可用于类或方法上。
//用于 类 上，表示访问 “所有方法 的父路径”（可有可无）
//用于 方法 上，表示访问 “每个方法 的路径”（必须有）。
@RequestMapping("/systemdictionarytype") //自定义父路径，为了见名知义，通常写作实体类的类名，但是它的首字母必须小写
public class SystemdictionarytypeController {
    @Autowired
    private ISystemdictionarytypeService SystemdictionarytypeService;

    /**
     * 接口：查询单个对象
     *
     * @param id
     * @return
     */
    //前端：get http://localhost:8080/Systemdictionarytype/1
    @ApiOperation(value = "接口：查询单个对象")
    /**@ApiOperation是Swagger包中的一种注解 使用@ApiOperation注解用来描述我们写的接口。
    ApiOperation 注解提供了丰富的属性来允许我们自定义接口描述信息，包括接口名称，接口所属分组等。
     */
    @GetMapping("/{id}")
    public Systemdictionarytype findOne(@PathVariable("id") Long id) {
        return SystemdictionarytypeService.loadById(id);
    }

    /**
     * 接口：分页和高级查询
     *
     * @param SystemdictionarytypeQuery
     * @return
     */
    //前端 post http://localhost:8080/Systemdictionarytype json对象{}
    @ApiOperation(value = "接口：分页和高级查询")
    @PostMapping
    //PostMapping接收数据在请求体中相对安全，GetMapping接收数据在Url，很容易别看到，而且有数据大小和类型的限制。
    //@RequestBody主要用来接收前端传递给后端的json字符串中的数据的(请求体中的数据的)；而最常用的使用请求体传参的无疑是POST请求了
    //因为SystemdictionarytypeQuery的currentPage，pageSize，keyword是前端的值所以用这个注解
    public PageList<Systemdictionarytype> queryPage(@RequestBody SystemdictionarytypeQuery SystemdictionarytypeQuery) {
        return SystemdictionarytypeService.queryPage(SystemdictionarytypeQuery);
    }

    /**
     * 接口：查询所有
     *
     * @return
     */
    //前端：get http://localhost:8080/Systemdictionarytype
    @ApiOperation(value = "接口：查询所有")
    @GetMapping
    public List<Systemdictionarytype> findAll() {
        return SystemdictionarytypeService.loadAll();
    }

    /**
     * 接口：删除
     *
     * @param id
     * @return
     */
    //前端：delete http://localhost:8080/Systemdictionarytype/1
    @ApiOperation(value = "接口：删除")
    @DeleteMapping("/{id}")
    //@PathVariable-请求的URL会带上参数id作为URL的一部分
    public AjaxResult delete(@PathVariable("id") Long id) {
        try {
            SystemdictionarytypeService.del(id);
            return new AjaxResult(); //AjaxResult的success = true;msg = "操作成功";这是设置默认值，也叫初始值
        } catch (Exception e) {
            e.printStackTrace();
            //return new AjaxResult(false,"删除失败");
            return AjaxResult.me().setSuccess(false).setMsg("删除失败");
        }
    }

    /**
     * 添加或修改
     *
     * @param Systemdictionarytype
     * @return
     */
    //前端：put http://localhost:8080/Systemdictionarytype/ json对象{}
    @ApiOperation(value = "接口：添加或修改")
    @PutMapping
    public AjaxResult addOrUpdate(@RequestBody Systemdictionarytype Systemdictionarytype) {
        try {
            if (Systemdictionarytype.getId() == null) {//如果没有这个值就添加
                SystemdictionarytypeService.save(Systemdictionarytype);
            } else {
                SystemdictionarytypeService.update(Systemdictionarytype);
            }
            return new AjaxResult();
        } catch (Exception e) {
            e.printStackTrace();
            return new AjaxResult(false, "操作失败");
        }
    }


    @ApiOperation(value = "接口：批量删除")
    @PatchMapping
    public AjaxResult patchDelete(@RequestBody List<Long> ids) {
        try {
            //1.调用service
            SystemdictionarytypeService.patchDelete(ids);
            return new AjaxResult();
        } catch (Exception e) {
            e.printStackTrace();
            //return new AjaxResult(false,"删除失败");
            return AjaxResult.me().setSuccess(false).setMsg("删除失败");
        }
    }



}